package com.example.mobilesafe.sw1221.home;

import android.app.ActivityManager;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.mobilesafe.sw1221.R;
import com.example.mobilesafe.sw1221.home.view.ArcProgressBar;

import java.io.File;

public class HomeActivity extends AppCompatActivity implements View.OnClickListener{
    //显示手机清理 ， 骚扰拦截 ，病毒查杀 ，软件管理对应的布局
    private LinearLayout ll_clean,ll_interception,ll_security,ll_softwaer_manager;
    //显示程序锁 ， 网速测试 ， 流量监控对应的布局
    private RelativeLayout rl_app_lock,rl_speed_test,rl_natriffic;
    private ArcProgressBar pb_sd,pb_rom;//显示 SD 卡与内存信息
    private long total_sd,avail_sd,total_rom,avail_rom; //总容量与有效容量
    private int sd_used,rom_used;//SD_used 已经使用的容量
    private RelativeLayout title_bar;
    private TextView tv_main_title;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        getMemoryFromPhone();//调用获取内存信息 的 方法
        init();//调用初始化信息 的方法
    }
    //初始化控件
    private void init() {
        //标题的背景颜色设置为蓝色
        title_bar  = findViewById(R.id.title_bar);
        title_bar.setBackgroundResource(R.color.bule_color);
        tv_main_title=findViewById(R.id.tv_main_title);
        tv_main_title.setText("手机安全卫士");

        ll_clean=findViewById(R.id.ll_clean);
        ll_interception=findViewById(R.id.ll_interception);
        ll_security=findViewById(R.id.ll_security);
        ll_softwaer_manager=findViewById(R.id.ll_software_manager);

        rl_app_lock=findViewById(R.id.rl_app_locak);
        rl_speed_test=findViewById(R.id.rl_speed_test);
        rl_natriffic=findViewById(R.id.rl_netraffic);

        pb_sd=findViewById(R.id.pb_sd);
        pb_rom=findViewById(R.id.pb_rom);

        pb_sd.setMax(100);//最大进度为100
        pb_sd.setTitle("储存空间");//标题为储存空间
        new MyAsyncSDTask().execute(0);//创建异步SD 对象，显示SD 信息

        pb_rom.setMax(100);
        pb_rom.setTitle("内存");
        new MyAsyncRomTask().execute(0);//创建异步ROM 对象，显示ROM 信息

        ll_clean.setOnClickListener(this);
        ll_interception.setOnClickListener(this);
        ll_softwaer_manager.setOnClickListener(this);
        ll_security.setOnClickListener(this);

        rl_app_lock.setOnClickListener(this);
        rl_speed_test.setOnClickListener(this);
        rl_natriffic.setOnClickListener(this);

    }
    //获取手机 SD 卡与系统内存使用量与总量占比信息,Environment 环境类
//    StorageDirectory存储目录
    private void getMemoryFromPhone(){
        //获取内置 SD 卡的路径  /storage/emulated/（）
        File path = Environment.getExternalStorageDirectory();
        StatFs stat = new StatFs(path.getPath());//获取 SD 卡的存储信息
        long blockSize = stat.getBlockSizeLong();//获取块大小
        long blockCount = stat.getBlockCountLong();//获取块的书目
        total_sd=blockCount*blockSize;//SD 卡的总量计算
//        计算有效块 大小available；有效
        long availableBlocks = stat.getAvailableBlocksLong();
        avail_sd=availableBlocks*blockSize;//总的剩余空间
        //获取 ActivityManager 的服务对象
        ActivityManager mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);//多态向下转型
        //获取内存信息对象 memoryInfo ：内存信息
        ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
        //获取系统可用内存，保存在 memoryInfo 的对象上
        mActivityManager.getMemoryInfo(memoryInfo);
        total_rom=memoryInfo.totalMem;//获取系统总内存
        avail_rom=memoryInfo.availMem;//获取系统有效内存
        //计算 SD 卡占据内存与总量的比
        sd_used=(int)(((double)avail_sd/(double)total_sd)*100);
        rom_used=(int)(((double)avail_rom/(double)total_rom)*100);
    }

    //创建 ROM 任务
    private class MyAsyncRomTask extends AsyncTask<Integer,Integer,Integer>{

        @Override
        protected Integer doInBackground(Integer... integers) {
            Integer timer=0;
            while (timer<=rom_used){
//        Ctrl+Alt+T       try catch 的快捷键
                try {
                    publishProgress(timer);//更新进度
                    timer++;
                    Thread.sleep(5);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(Integer integer) {
            super.onPostExecute(integer);
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            pb_rom.setProgress((int)values[0]);//设置ArcProgressBar 的进度
        }
    }

    // 创建 SD 的任务
    private class MyAsyncSDTask extends AsyncTask<Integer,Integer,Integer>{
        @Override
        protected Integer doInBackground(Integer... integers) {
            Integer timer=0;
            while (timer<=sd_used){

                try {
                    publishProgress(timer);//更新进度
                    timer++;
                    Thread.sleep(5);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            return null;
        }

        @Override
        protected void onPostExecute(Integer integer) {
            super.onPostExecute(integer);
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            pb_sd.setProgress((int)values[0]);//更新ArcProgressBar 的进度
        }
    }

    @Override
    public void onClick(View v) {

    }
}


